import axios from 'axios'
import storage from 'localforage'
import { ElMessage } from 'element-plus'
// 创建一个独立的axios实例
const service = axios.create({
  // 设置baseUr地址,如果通过proxy跨域可直接填写base地址
  // baseURL: process.env.VUE_APP_BASE_API,
  baseURL: '/',
  // 配置请求超时时间
  timeout: 10000 // 默认值是 `0` (永不超时)
  // 如果用的JSONP，可以配置此参数带上cookie凭证，如果是代理和CORS不用设置
  // withCredentials: true
})

// 请求拦截器
service.interceptors.request.use(
  async config => {
    // 发送请求前做的事
    if (!config.unAuth) {
      await storage.getItem('OAuthToken').then(token => {
        if (token) {
          config.headers['Authorization'] = `Bearer ${token}`
        } else {
          console.log(`'${config.name}: 'invalid token and auth required`)
          return false
        }
      })
    }
    return config
  },
  error => {
    // 对请求错误的处理
    Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 2XX 状态码走这
    // 响应数据
    const res = response.data
    return res
  },
  error => {
    // 除 2XX 外的状态码都走这
    // 响应错误的处理
    if (error.response && error.response.status === 401) {
      ElMessage({
        message: '请先登录',
        type: 'error',
        duration: 5 * 1000
      })
      storage.removeItem('OAuthToken')
    } else if (error.response && error.response.data && error.response.data.message) {
      ElMessage({
        message: error.response.data.message || '服务器错误，请稍后再试',
        type: 'error',
        duration: 5 * 1000
      })
    }
    return Promise.reject(error)
  }
)
export default service
